package com.lianchuang.service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.lianchuang.entity.autoReply.MessageResponse;
import com.lianchuang.entity.message.resp.Article;
import com.lianchuang.entity.message.resp.NewsMessage;
import com.lianchuang.util.MessageUtil;
import com.weixin.robot.TulingApiProcess;

public class CoreService {
	static Logger logger = LoggerFactory.getLogger(CoreService.class);

	/**
	 * 处理微信发来的请求
	 * @param request
	 * @return
	 */
	public static String processRequest(HttpServletRequest request) {
		String respMessage = null;
		try {
			// 默认返回的文本消息内容
			String respContent = "请求处理异常，请稍候尝试！";
			// xml请求解析
			// 调用消息工具类MessageUtil解析微信发来的xml格式的消息，解析的结果放在HashMap里；
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			// 从HashMap中取出消息中的字段；
			// 发送方帐号（open_id）
			String fromUserName = requestMap.get("FromUserName");
			// 公众帐号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");
			// 消息内容
			String content = requestMap.get("Content");
			// 从HashMap中取出消息中的字段；
			logger.info("fromUserName is:" + fromUserName + " toUserName is:"
					+ toUserName + " msgType is:" + msgType);

			// 文本消息
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
				System.out.println("-------------文本消息-----------");
				if(content.equals("1")){
					return MessageResponse.getTextMessage(fromUserName,
							toUserName, "测试回复用户文本消息");
				}else if(content.equals("2")){
					List<Article> list = new ArrayList<Article>();
					NewsMessage newsMessage = new NewsMessage();
					 Article article = new Article(); 
	                 article.setTitle("微信公众帐号测试"); 
	                 article.setDescription("测试回复用户图文消息"); 
	                 article.setPicUrl("http://image.tianjimedia.com/uploadImages/2014/318/06/W6BRV0W1018M.JPEG"); 
	                 article.setUrl("www.baidu.com"); 
	                 list.add(article);
	                 // 设置图文消息个数 
	                 newsMessage.setArticleCount(1); 
	                 newsMessage.setArticles(list);
	                 // 将图文消息对象转换成xml字符串 
	                 return MessageResponse.getNewsMessage(fromUserName, toUserName, list);
				}else if(content.equals("3")){
					return MessageResponse.getTextMessage(fromUserName, toUserName, "第三项");
				}else if(content.equals("4")){
					return MessageResponse.getTextMessage(fromUserName, toUserName, "第四项");
				}else if (content != null) {	// 微信聊天机器人测试 2015-3-31
					System.out.println("机器人回复--------");
					respContent = TulingApiProcess.getTulingResult(content);
					if (respContent == "" || null == respContent) {
						MessageResponse.getTextMessage(fromUserName, toUserName, "服务号暂时无法回复，请稍后再试！");
					}
					return MessageResponse.getTextMessage(fromUserName, toUserName, respContent);
				}
			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送
				String eventType = requestMap.get("Event");// 事件类型
				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {// 订阅
					respContent = "欢迎关注XXX公众号，此公众号的用途。"+
									"快捷功能如下："+
									"1：新增功能；"+
									"2：修改功能；"+
									"3：查看历史；"+
									"4：回复有惊喜。"+
									"回复相应数字，可使用快捷功能。";
					return MessageResponse.getTextMessage(fromUserName, toUserName,respContent);
				} else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {// 取消订阅
					// TODO 取消订阅后用户再收不到公众号发送的消息，因此不需要回复消息
				} else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {// 自定义菜单点击事件
					System.out.println("============用户点击菜单==========");
					String eventKey = requestMap.get("EventKey");// 事件KEY值，与创建自定义菜单时指定的KEY值对应
					logger.info("eventKey is:" + eventKey);
					return MenuClickService.getClickResponse(eventKey, fromUserName, toUserName);
				}
			} else if (msgType.equals("voice")) {		// 开启微信声音识别
				String recvMessage = requestMap.get("Recognition");
				// respContent = "收到的语音解析结果："+recvMessage;
				if (recvMessage != null) {
					respContent = TulingApiProcess.getTulingResult(recvMessage);
				} else {
					respContent = "您说的太模糊了，能不能重新说下呢？";
				}
				return MessageResponse.getTextMessage(fromUserName, toUserName,
						respContent);
			}
			// 拍照功能
			else if (msgType.equals("pic_sysphoto")) {

			} else {
				return MessageResponse.getTextMessage(fromUserName, toUserName,
						"返回为空");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return respMessage;
	}

}
